iT邦幫忙

2022 iThome 鐵人賽

DAY 5
1

昨天把初步框架架起來
今天就來做個應用程式來試看看吧!

step 1 初始化

我們要做一個 quotations 的應用程式
首先在 rainbow 外建立一個資料夾

# 建立 quotations 資料夾
> mkdir quotations

# 進入 quotations
> cd quotations
# git 初始化
> git init

Initialized empty Git repository in src/
quotitions/.git/
# 建立 config 資料夾
> mkdir config

# 建立 app 資料夾
> mkdir app

web小辭典

▶ config檔

內容包含框架載入前的程式碼設定
以及框架中的組成元件、環境設定等
可以說框架最基本的設定都放在這個檔案中了

▶ app檔

基本的架構及框架功能都會放在這裡
包含 controllers、models、views、helpers 等

step 2 加入 gemfile

quotations 的框架是 Rainbow
所以我們要在 gemfile 加入 rainbow 並安裝

# 加入gemfile檔
> source 'https://rubygems.org'

> gem "rainbow" # Your gem name

step 3 bundle install

建立 rainbow 套件

> bundle install

Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using bundler 2.3.20
Using rainbow 3.1.1
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

建立完成就會跑出 Gemfile.lock (版本管理資料)

step 4 建立 Rack

應用程式免不了傳送 HTTP request

所以我們要來設定 Rack

# quotations/config.ru

# 用 proc 把 block 物件化,讓它可以回應 call 方法

run proc {
  [
     200, 
     {'Content-Type' => 'text/html'},
     ["Hello, world!"]
  ]
}

web小辭典

▶ config.ru檔

Rack 基本設定,包含如何用 Rack 啟用應用程式

step 5 啟動應用程式!

> rackup -p 3001

* Puma version: 5.6.4 (ruby 2.7.2-p137) ("Birdie's Version")
*  Min threads: 0
*  Max threads: 5
*  Environment: development
*          PID: 83450
* Listening on http://127.0.0.1:3001
* Listening on http://[::1]:3001

http://localhost:3001

按進超連結就能看到 Hello World!

無法順利啟動,請確認下列幾件事情

  1. 確認PATH environment variable 有沒有包含 gem,沒有請更新
  2. 返回到最初,重新安裝 Ruby 及 gem
  3. 確認 gemspec 的 rack dependency 是設定在 runtime dependency 而非 development dependency

web小辭典

▶ 怎麼確認 PATH environment variable

輸入下列指令,就會出現 RubyGems 的相關資訊
如果出現沒有這個指令的訊息就是要去更新囉

> gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 3.1.4
  - RUBY VERSION: 2.7.2 (2020-10-01 patchlevel 137) [arm64-darwin20]
  - INSTALLATION DIRECTORY: /Users/zhangjianing/.rvm/gems/ruby-2.7.2
  - USER INSTALLATION DIRECTORY: /Users/zhangjianing/.gem/ruby/2.7.0
  - RUBY EXECUTABLE: /Users/zhangjianing/.rvm/rubies/ruby-2.7.2/bin/ruby

step 6 框架設定 Rack

應用程式的相關設定都要放在 rainbow.rb 這個檔案中,檔案才會一起打包

然後在 Rainbow 設定 Rack (就不用每次做應用程式都要設定 Rack 了)

# rainbow/lib/rainbow.rb
require "rainbow/version"

module Rainbow
class Application
  def call(env)
    [
      200, 
      {'Content-Type' => 'text/html'},
      ["Hello from Ruby on Rulers!"]
    ]
  end
 end 
end

step 7 刪除 rainbow-0.0.1.gem

因為我們有做一些設定變更
如果不刪除、重新安裝就無法讀取最新的設定
所以記得刪除 + 重新安裝

step 8 重新安裝套件

> gem build rainbow.gemspec

  Successfully built RubyGem
  Name: rainbow
  Version: 0.0.1
  File: rainbow-0.0.1.gem

> gem install rainbow-0.0.1.gem

step 9 設定 quotations 框架為 Rainbow

現在我們要來使用 Rainbow::Application 做設定

首先來到 config 檔案中並建立 application.rb

# quotations/config

> touch application.rb
require "rainbow"

# quotations 的 Application 繼承 Rainbow 的 Application

module Quotations
  class Application < Rainbow::Application
  end
end

設定完,我們再來 Gemfile 中設定

要記得加上 path,才知道要從哪裡抓 rainbow 套件

# quotations/Gemfile
gem "rainbow", :path => "../rainbow"

設定完就可以存檔進行下一步

step 10 重新設定 quotation config

在 quotation 的 config.ru 中重新設定,把 Rack 拿掉

引入剛剛 config/application.rb 檔中的設定

require './config/application'
run Quotations::Application.new

最後在 quotation 啟動 rackup -p 3001

看到 Hello from Ruby on Rulers!就是成功囉!


上一篇
Day 04 建立框架
下一篇
Day 06 完整框架的基本功能(一)
系列文
從0開始刻 淺談 Rails 的運作魔法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言